home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 2 / CU Amiga Magazine's Super CD-ROM 02 (1996)(EMAP Images)(GB)[!][issue 1996-04].iso / magazine / amiga_e / amigae.june.archive / 000121_crash!golum.riv…u.edu.au!geoff_Mon, 21 Jun 93 10:30:22 PST.msg < prev    next >
Text File  |  1993-08-31  |  3KB  |  90 lines

  1. Received: by bkhouse.cts.com (V1.16/Amiga)
  2.     id AA00000; Mon, 21 Jun 93 10:30:22 PST
  3. Received: from golum.riv.csu.edu.au by crash.cts.com with smtp
  4.     (Smail3.1.28.1 #15) id m0o7AQm-00002HC; Sat, 19 Jun 93 14:26 PDT
  5. Received: by golum.riv.csu.edu.au (5.65/DEC-Ultrix/4.3)
  6.     id AA20134; Sun, 20 Jun 1993 07:28:50 +1000
  7. Message-Id: <9306192128.AA20134@golum.riv.csu.edu.au>
  8. Reply-To: gfellows@csu.edu.au
  9. Organisation: Charles Sturt University-Riverina, Australia
  10. Date: Sun, 20 Jun 93 07:28:50 -0800
  11. X-Mts: smtp
  12. From: Geoff Fellows (CSU-R InfoStud) <geoff@golum.riv.csu.edu.au>
  13. To: amigae@bkhouse.cts.com
  14. Subject: Toy program
  15.  
  16. Here's a toy program that someone might find useful:
  17.  
  18. /* Draw a tree using recursion on the command */
  19. MODULE    'dos/dostags', 'utility/tagitem', 'intuition/intuition'
  20. CONST IFLAGS=IDCMP_CLOSEWINDOW, X0=160, Y0=256, MINLEN=16, SQR3E6=1732
  21.  
  22. PROC main()
  23.     DEF myargs:PTR TO LONG,rdargs
  24.  
  25.     myargs:=[0,0,0,0,0]
  26.     rdargs:=ReadArgs('RAST/A/N,X/A/N,Y/A/N,GRAD/A/N,LEN/A/N', myargs, NIL)
  27.     IF rdargs
  28.         branch(myargs)
  29.         FreeArgs(rdargs)
  30.     ELSE
  31.         root()
  32.     ENDIF
  33. ENDPROC
  34. PROC root()
  35.     DEF sptr, wptr
  36.     sptr:=OpenS(320,256,4,0,'Root Screen')
  37.     wptr:=OpenW(0,0,320,256,IFLAGS,15,'Tree',sptr,15,NIL)
  38.     newbranch(0, 0, 90, 128)
  39.     WaitIMessage(wptr)
  40.     CloseW(wptr)
  41.     CloseS(sptr)
  42. ENDPROC
  43. PROC branch(myargs: PTR TO LONG)
  44.     DEF x, y, x1, y1, dxdy: PTR TO LONG, gradient, length
  45.  
  46.     SetStdRast(Long(myargs[0]))
  47.     x := Long(myargs[1])
  48.     y := Long(myargs[2])
  49.     gradient := Long(myargs[3])
  50.     length := Long(myargs[4])
  51.     IF length >= MINLEN
  52.         dxdy := dxy(gradient, length)
  53.         x1 := x + dxdy[0]; y1 := y + dxdy[1]
  54.         Line(X0+x,Y0-y,X0+x1,Y0-y1,1)
  55.         newbranch(x1, y1, gradient-30, length/2)
  56.         newbranch(x1, y1, gradient+30, length/2)
  57.     ELSE
  58.         Plot(X0+x, Y0-y, 2)    /* leaf */
  59.     ENDIF
  60. ENDPROC
  61. PROC dxy(gradient, length)
  62.     DEF dx, dy
  63.  
  64.     IF gradient < 0 THEN gradient := 360 + Mod(gradient, 360)
  65.     gradient := Mod(gradient, 360)
  66.     SELECT gradient
  67.     CASE  0;    dx:= length; dy := 0
  68.     CASE 30;    dx:= length * SQR3E6/2000; dy := length/2
  69.     CASE 60;    dx:= length / 2; dy := length * SQR3E6/2000
  70.     CASE 90;    dx:= 0; dy := length
  71.     CASE 120;    dx:= -length / 2; dy := length * SQR3E6/2000
  72.     CASE 150;    dx:= -length * SQR3E6/2000; dy := length / 2
  73.     CASE 180;    dx:= -length; dy := 0
  74.     CASE 210;    dx:= -length * SQR3E6/2000; dy := -length/2
  75.     CASE 240;    dx:= -length / 2; dy := -length * SQR3E6/2000
  76.     CASE 270;    dx:= 0; dy := -length
  77.     CASE 300;    dx:= length / 2; dy := -length * SQR3E6/2000
  78.     CASE 330;    dx:= length * SQR3E6/2000; dy := -length / 2
  79.     ENDSELECT
  80. ENDPROC [dx, dy]
  81. PROC newbranch(x, y, g, l)
  82.     DEF command[80]: STRING
  83.     StrAdd(command, '', ALL)    /* required initialisation */
  84.     RawDoFmt('%s %ld %ld %ld %ld %ld',
  85.         ['Tree', stdrast, x, y, g, l], {putCh}, command)
  86.     Execute(command, NIL, NIL)
  87. ENDPROC
  88. putCh: MOVE.B D0,(A3)+; RTS /* Proc used by RawDoFmt (see exec.doc) */ 
  89.  
  90. Just compile and then type 'tree'